﻿<?xml version="1.0" encoding="utf-8"?>
<PatternTemplates PatternsVersion ="2.0">
  <PatternTemplate CodeLang="CSharp" PatternName="AbstractFactory">
    <PatternProperties>
      <PatternAlias>Kit</PatternAlias>
      <MinVSVersion>9.0</MinVSVersion>
      <!-- <Picture >AbstractFactory.png</Picture> -->
      <OnlineResources>http://en.wikipedia.org/wiki/Abstract_factory_pattern</OnlineResources>
      <CompilerSyntax>C# 2.0</CompilerSyntax>
      <ProgrammingStyle>Generic</ProgrammingStyle>
      <!-- must be after the OnlineResources node <Description StoredAs = "Url">http://en.wikipedia.org/wiki/Abstract_factory_pattern</Description>-->
      <Category>Creational</Category>
      <!-- <Culture>en</Culture> -->
    </PatternProperties>
    <FileTemplates>
      <FileTemplate  FileItemName="Factories.cs">FactoriesTemplate.cs</FileTemplate>
      <FileTemplate  FileItemName="Products.cs">ProductsTemplate.cs</FileTemplate>
    </FileTemplates>
    <TemplateArguments>
      <TemplateArgument ArgumentName="ConcreteFactory1" IsRuntime="false" Description ="ConcreteFactory1">ConcreteFactory1</TemplateArgument>
      <TemplateArgument ArgumentName="ConcreteFactory2" IsRuntime="false" Description ="ConcreteFactory2">ConcreteFactory2</TemplateArgument>
      <TemplateArgument ArgumentName="ProductA1" IsRuntime="false" Description ="ProductA1">ProductA1</TemplateArgument>
      <TemplateArgument ArgumentName="ProductA2" IsRuntime="false" Description ="ProductA2">ProductA2</TemplateArgument>
      <TemplateArgument ArgumentName="ProductB1" IsRuntime="false" Description ="ProductB1">ProductB1</TemplateArgument>
      <TemplateArgument ArgumentName="ProductB2" IsRuntime="false" Description ="ProductB2">ProductB2</TemplateArgument>
      <TemplateArgument ArgumentName="AbstractProductA" IsRuntime="false" Description ="AbstractProductA">AbstractProductA</TemplateArgument>
      <TemplateArgument ArgumentName="AbstractProductB" IsRuntime="false" Description ="AbstractProductB">AbstractProductB</TemplateArgument>      
      <TemplateArgument ArgumentName="RootNamespace" IsRuntime="True" Description ="NameSpace"/>
    </TemplateArguments>
</PatternTemplate>
  <PatternTemplate CodeLang="CSharp" PatternName="FactoryMethod">
    <PatternProperties>
      <PatternAlias>Virtual Constructor</PatternAlias>
      <MinVSVersion>9.0</MinVSVersion>
      <Picture >FactoryMethod.png</Picture>
      <OnlineResources>http://en.wikipedia.org/wiki/Factory_method_pattern</OnlineResources>
      <CompilerSyntax>C# 3.0</CompilerSyntax>
      <ProgrammingStyle>Plain</ProgrammingStyle>
      <!--<Description StoredAs ="Text">Define an interface for creating an object,\r\nbut let subclasses decide which class to instantiate.&#13;&#10;Factory Method lets a class defer instantiation to subclasses.
      </Description>-->
      <Category>Creational</Category>
      <!--<Culture>de</Culture>-->
    </PatternProperties>
    <FileTemplates>
      <FileTemplate  FileItemName="FactoryMethod.cs">FactoryMethodTemplate.cs</FileTemplate>
    </FileTemplates>
    <TemplateArguments>
      <TemplateArgument ArgumentName="RootNamespace" IsRuntime="True" Description ="NameSpace"/>
     <TemplateArgument ArgumentName="IProduct" IsRuntime="false" Description ="IProduct interface">IProduct</TemplateArgument>
      <TemplateArgument ArgumentName="Creator" IsRuntime="false" Description ="AbstractCreator">Creator</TemplateArgument>
    </TemplateArguments>
  </PatternTemplate>
  <PatternTemplate CodeLang="CSharp" PatternName="Singleton">
    <PatternProperties>
      <PatternAlias>Singleton</PatternAlias>
      <MinVSVersion>9.0</MinVSVersion>
      <OnlineResources>http://msdn.microsoft.com/en-us/library/ff650316.aspx</OnlineResources>
      <CompilerSyntax>C# 2.0</CompilerSyntax>
      <ProgrammingStyle>static initialization</ProgrammingStyle>
      <!--<Description StoredAs ="FileSystem">singleton.txt</Description>-->
      <Category>Creational</Category>
    </PatternProperties>
    <FileTemplates>
      <FileTemplate  FileItemName="Singleton.cs">SingletonTemplate.cs</FileTemplate>
    </FileTemplates>
    <TemplateArguments>
      <TemplateArgument ArgumentName="RootNamespace" IsRuntime="True" Description ="NameSpace"/>
      <TemplateArgument ArgumentName="Singleton" IsRuntime="false" Description ="Singleton class Name">ConcreteSingleton</TemplateArgument>
    </TemplateArguments>
  </PatternTemplate>
  <PatternTemplate CodeLang="CSharp" PatternName="Singleton">
    <PatternProperties>
      <PatternAlias>Singleton</PatternAlias>
      <MinVSVersion>10.0</MinVSVersion>
      <OnlineResources>http://en.wikipedia.org/wiki/Singleton_pattern</OnlineResources>
      <CompilerSyntax>C# 3.0</CompilerSyntax>
      <ProgrammingStyle>multi threaded</ProgrammingStyle>
      <Category>Creational</Category>
    </PatternProperties>
    <FileTemplates>
      <FileTemplate  FileItemName="MultiThreadedSingleton.cs">MultiThreadedSingletonTemplate.cs</FileTemplate>
    </FileTemplates>
    <TemplateArguments>
      <TemplateArgument ArgumentName="RootNamespace" IsRuntime="True" Description ="NameSpace"/>
      <TemplateArgument ArgumentName="MultiThreadedSingleton" IsRuntime="false" Description ="Singleton class Name">MultiThreadedSingleton</TemplateArgument>
    </TemplateArguments>
  </PatternTemplate>
  <PatternTemplate CodeLang="CSharp" PatternName="Bridge">
    <PatternProperties>
      <PatternAlias>Handle or Body</PatternAlias>
      <MinVSVersion>9.0</MinVSVersion>
      <Picture >Bridge.png</Picture>
      <OnlineResources>http://en.wikipedia.org/wiki/Bridge_pattern</OnlineResources>
      <CompilerSyntax>C# 3.0</CompilerSyntax>
      <ProgrammingStyle>Plain</ProgrammingStyle>
      <Category>Structural</Category>
      <!--<Culture>de</Culture>-->
    </PatternProperties>
    <FileTemplates>
      <FileTemplate  FileItemName="Bridge.cs">BridgeTemplate.cs</FileTemplate>
    </FileTemplates>
    <TemplateArguments>
      <TemplateArgument ArgumentName="RootNamespace" IsRuntime="True" Description ="NameSpace"/>
      <TemplateArgument ArgumentName="Abstraction" IsRuntime="false" Description ="Abstraction interface">Abstraction</TemplateArgument>
      <TemplateArgument ArgumentName="RefinedAbstraction" IsRuntime="false" Description ="Refined Abstraction">RefinedAbstraction</TemplateArgument>
      <TemplateArgument ArgumentName="Implementor" IsRuntime="false" Description ="Implementor">Implementor</TemplateArgument>
    </TemplateArguments>
  </PatternTemplate>
  <PatternTemplate CodeLang="CSharp" PatternName="State">
    <PatternProperties>
      <PatternAlias>Object of States</PatternAlias>
      <MinVSVersion>9.0</MinVSVersion>
      <Picture >state.png</Picture>
      <OnlineResources>http://en.wikipedia.org/wiki/State_pattern</OnlineResources>
      <CompilerSyntax>C# 2.0</CompilerSyntax>
      <ProgrammingStyle>plain</ProgrammingStyle>
      <!--<Description StoredAs ="Text">Allows an object to alter its behavior when its internal state changes.&#13;&#10;The object will appear to change its class.
      </Description>-->
      <Category>Behavioral</Category>
    </PatternProperties>
    <FileTemplates>
      <FileTemplate  FileItemName="State.cs">StateTemplate.cs</FileTemplate>
    </FileTemplates>
    <TemplateArguments>
      <TemplateArgument ArgumentName="RootNamespace" IsRuntime="True" Description ="NameSpace"/>
      <TemplateArgument ArgumentName="Context" IsRuntime="false" Description ="Context class Name">Context</TemplateArgument>
      <TemplateArgument ArgumentName="IState" IsRuntime="false" Description ="IState interface Name">IState</TemplateArgument>
      <TemplateArgument ArgumentName="Handle" IsRuntime="false" Description ="Handle method Name">Handle</TemplateArgument>
      <TemplateArgument ArgumentName="ConcreteStateA" IsRuntime="false" Description ="ConcreteStateA class Name">ConcreteStateA</TemplateArgument>
      <TemplateArgument ArgumentName="ConcreteStateB" IsRuntime="false" Description ="ConcreteStateB class Name">ConcreteStateB</TemplateArgument>
      <TemplateArgument ArgumentName="ConcreteStateC" IsRuntime="false" Description ="ConcreteStateC class Name">ConcreteStateC</TemplateArgument>
    </TemplateArguments>
  </PatternTemplate>
  <PatternTemplate CodeLang="CSharp" PatternName="Proxy">
    <PatternProperties>
      <PatternAlias>Surogate</PatternAlias>
      <MinVSVersion>9.0</MinVSVersion>
      <Picture >proxy.png</Picture>
      <OnlineResources>http://en.wikipedia.org/wiki/Proxy_pattern</OnlineResources>
      <CompilerSyntax>C# 2.0</CompilerSyntax>
      <ProgrammingStyle>plain</ProgrammingStyle>
      <!--<Description StoredAs ="Text">Provides a surrogate or placeholder for another object to control access to it.
      </Description> -->
      <Category>Structural</Category>
    </PatternProperties>
    <FileTemplates>
      <FileTemplate  FileItemName="Proxy.cs">ProxyTemplate.cs</FileTemplate>
    </FileTemplates>
    <TemplateArguments>
      <TemplateArgument ArgumentName="RootNamespace" IsRuntime="True" Description ="NameSpace"/>    
      <TemplateArgument ArgumentName="ISubject" IsRuntime="false" Description ="ISubject interface Name">ISubject</TemplateArgument>
      <TemplateArgument ArgumentName="Request" IsRuntime="false" Description ="Request method Name">Request</TemplateArgument>
      <TemplateArgument ArgumentName="Proxy" IsRuntime="false" Description ="Proxy class Name">Proxy</TemplateArgument>
      <TemplateArgument ArgumentName="RealSubject" IsRuntime="false" Description ="RealSubject class Name">RealSubject</TemplateArgument>
    </TemplateArguments>
  </PatternTemplate>
  <PatternTemplate CodeLang="CSharp" PatternName="Chain">
    <PatternProperties>
      <PatternAlias>Chain of Responsability</PatternAlias>
      <MinVSVersion>9.0</MinVSVersion>
      <Picture >chain.png</Picture>
      <OnlineResources>http://en.wikipedia.org/wiki/Chain_of_responsibility_pattern</OnlineResources>
      <CompilerSyntax>C# 2.0</CompilerSyntax>
      <ProgrammingStyle>plain</ProgrammingStyle>
      <!--<Description StoredAs ="Text">Avoids coupling the sender of a request to its receiver by giving more than one object a chance to handle the request.
Chain the receiving objects and pass the request along the chain until an object handles it.
      </Description>-->
      <Category>Behavioral</Category>
    </PatternProperties>
   <!-- <FileTemplates>
      <FileTemplate  FileItemName="chain.cs">chainTemplate.cs</FileTemplate>
    </FileTemplates> -->
    <TemplateArguments>
      <TemplateArgument ArgumentName="RootNamespace" IsRuntime="True" Description ="NameSpace"/>
      <TemplateArgument ArgumentName="Request" IsRuntime="false" Description ="Request class Name">Request</TemplateArgument>
      <TemplateArgument ArgumentName="Handler" IsRuntime="false" Description ="Handler class Name">Handler</TemplateArgument>
      <TemplateArgument ArgumentName="ConcreteHandlerA" IsRuntime="false" Description ="ConcreteHandlerA class Name">ConcreteHandlerA</TemplateArgument>
      <TemplateArgument ArgumentName="ConcreteHandlerB" IsRuntime="false" Description ="ConcreteHandlerB class Name">ConcreteHandlerB</TemplateArgument>
      <TemplateArgument ArgumentName="ConcreteHandlerC" IsRuntime="false" Description ="ConcreteHandlerC class Name">ConcreteHandlerC</TemplateArgument>
    </TemplateArguments>
  </PatternTemplate>  
</PatternTemplates>
